package com.hu.system.mapper;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 首页仪表盘Mapper接口
 *
 * @author hu
 * @date 2025-01-22
 */
public interface DashboardMapper {

    /**
     * 统计店铺总数
     *
     * @param shopIds 店铺ID列表（数据权限）
     * @return 店铺总数
     */
    int countShops(@Param("shopIds") List<Long> shopIds);

    /**
     * 统计产品总数
     *
     * @param shopIds 店铺ID列表（数据权限）
     * @return 产品总数
     */
    int countProducts(@Param("shopIds") List<Long> shopIds);

    /**
     * 统计剩余库存总量
     *
     * @param shopIds 店铺ID列表（数据权限）
     * @return 库存总量
     */
    int countStockTotal(@Param("shopIds") List<Long> shopIds);

    /**
     * 统计本月采购金额
     *
     * @param shopIds 店铺ID列表（数据权限）
     * @return 本月采购金额
     */
    Double sumPurchaseAmountThisMonth(@Param("shopIds") List<Long> shopIds);

    /**
     * 查询最近30天采购趋势
     *
     * @param shopIds 店铺ID列表（数据权限）
     * @param days    天数
     * @return 趋势数据
     */
    List<Map<String, Object>> selectPurchaseTrend(@Param("shopIds") List<Long> shopIds, @Param("days") int days);

    /**
     * 查询产品状态分布
     *
     * @param shopIds 店铺ID列表（数据权限）
     * @return 状态分布数据
     */
    List<Map<String, Object>> selectProductStatus(@Param("shopIds") List<Long> shopIds);

    /**
     * 查询库存预警列表（TOP10）
     *
     * @param shopIds   店铺ID列表（数据权限）
     * @param threshold 预警阈值
     * @return 预警产品列表
     */
    List<Map<String, Object>> selectStockWarning(@Param("shopIds") List<Long> shopIds, @Param("threshold") int threshold);

    /**
     * 查询利润预警列表（利润率低于阈值的产品TOP10）
     *
     * @param shopIds             店铺ID列表（数据权限）
     * @param profitRateThreshold 利润率预警阈值（例如：20表示20%）
     * @return 预警产品列表
     */
    List<Map<String, Object>> selectProfitWarning(@Param("shopIds") List<Long> shopIds, @Param("profitRateThreshold") double profitRateThreshold);
}

